Packet switched networks, such as the Internet, divide a message or a data stream transmitted by a source into discrete packets or datagrams prior to transmission. Upon receipt of the packets by the recipient, the packets are recompiled to form the original message or data stream. As a packet-switched network, the Internet is comprised of various physical connections between computing devices, servers, routers, sub-networks, and other devices which are distributed throughout the network.
Routers connect networks, and each router has multiple inputs and multiple outputs coupled to independent network devices such as servers or other routers, the connections being made through communications links such as optical fibers or copper wires or the like.
Routers receive packets being sent over the network and determine the next hop or segment of the network to which each packet should be sent through one of the ports of the router. When the router passes the packet to the next destination in the network, the packet is one step closer to its final destination. Each packet includes header information indicating the final destination address of the packet.
Conventionally, routers include memories and microprocessors therein for processing the packets received by the routers, as well as for performing other functions required of the router. A route processor is a dedicated embedded subsystem which is responsible for communicating with the neighboring routers in the network to obtain current and ever-changing information about the network conditions. The route processor forms a routing table which is downloaded into and subsequently accessed for forwarding packets by a forwarding engine.
The forwarding engine of the router is responsible for determining the destination address and output port within the router to which the received packet is directed, this determination conventionally being made by accessing a routing table containing routing information for the entire network and performing a look-up operation.
Conventionally, determining the destination port within the router to which the received packet is to be sent is a computationally intensive process, particularly in view of the high data rates of the network (known as the “line rate”), such as 10 gigabytes/second. At this line rate, a forwarding engine within a router must make the destination port determination for approximately 30 million minimum-sized IP packets per second per port. Accordingly, as the router receives multiple packets, a conventional forwarding engine utilizes the large buffer memory on its front end to temporarily store a number of packets until the path is determined of the packet presently being processed by the forwarding engine.
Internet security concerns also increase the amount of time that a router needs to determine a destination port for a packet. For example, a packet is often encrypted to protect the data contained in the packet. In order to determine where to send the packet, the router needs to decrypt the packet, read the address information, determine the destination port, and then encrypt the packet again before sending it to its destination port. Conventional encryption and decryption engines in routers and networking devices often take several cycles to process a packet. Therefore, performing the encryption and decryption processes can result in a significant bottleneck in the transmission of network traffic.
As such, conventional forwarding engines for routers can be susceptible to performance degradation if the network traffic directed at the router is high, particularly when the packets are encrypted, thereby requiring that the decryption and encryption processes be performed quickly. Further, the increasing demand for IP-centric services over the Internet, such as voice over IP, streaming video, and data transfers to wireless devices with unique IP addresses, has increased the demand for data handling by the forwarding engines.